package day26.homework;

import java.util.ArrayList;
import java.util.List;

public class Return2 { 
    public static void main(String[] args) { 
        // 调用testReturn2方法并打印返回结果
        System.out.println(testReturn2()); 
    } 
    
    private static List<Integer> testReturn2() { 
        // 创建一个ArrayList实例
        List<Integer> list = new ArrayList<>(); 
        try { 
            // 向list中添加元素1
            list.add(1); 
            // 打印try块中的list内容
            System.out.println("try:" + list); 
            // 在try块中返回list引用
            // 注意：虽然这里执行了return，但finally块仍会执行
            return list; 
        } finally { 
            // finally块总会执行，即使try块中已经执行了return
            // 此时向list中添加元素3，由于list是引用类型，所以修改会影响返回值
            list.add(3); 
            // 打印finally块中的list内容
            System.out.println("finally:" + list); 
        } 
        // finally执行完毕后，才真正返回到调用者
    } 
}
/*
程序执行流程和输出结果解释：
1. 程序从main方法开始执行，调用testReturn2()方法
2. 在testReturn2()方法中，创建一个空的ArrayList实例list
3. 进入try块，向list中添加元素1，此时list内容为[1]
4. 打印try块中的list内容，输出"try:[1]"
5. 遇到return语句，保存返回值list的引用，但并未立即返回，而是先执行finally块
6. 在finally块中，向list中添加元素3，由于list是引用类型，所以修改会影响返回值，此时list内容为[1, 3]
7. 打印finally块中的list内容，输出"finally:[1, 3]"
8. finally块执行完毕后，返回之前保存的list引用，此时list的内容为[1, 3]
9. main方法打印返回值"[1, 3]"
*/